-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
feat: Add quick-add button to array parameter in Cloud Config #2866
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Add quick-add button to array parameter in Cloud Config #2866
Conversation
|
🚀 Thanks for opening this pull request! |
|
Warning Rate limit exceeded@mtrezza has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 6 minutes and 37 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughThe update adds user notifications and a new action for array-type configuration parameters in the config dashboard. It introduces a notification system for transient messages and a button to add unique entries to array parameters, using a modal prompt and direct server update. Minor UI and style adjustments are also included. A new Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant ConfigComponent
participant ParseServer
User->>ConfigComponent: Clicks "Add" button on array parameter
ConfigComponent->>User: Shows AddArrayEntryDialog modal
User->>ConfigComponent: Submits new entry (JSON or string)
ConfigComponent->>ParseServer: Sends request to add entry (master key)
alt Success
ParseServer-->>ConfigComponent: Success response
ConfigComponent->>ConfigComponent: Show success notification
ConfigComponent->>ConfigComponent: Refresh config data
else Failure
ParseServer-->>ConfigComponent: Error response
ConfigComponent->>ConfigComponent: Show error notification
end
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
|
The label |
🎉 Snyk checks have passed. No issues have been found so far.✅ security/snyk check is complete. No issues have been found. (View Details) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
src/dashboard/Data/Config/Config.react.js(8 hunks)
🧰 Additional context used
🧠 Learnings (1)
src/dashboard/Data/Config/Config.react.js (1)
Learnt from: mtrezza
PR: parse-community/parse-dashboard#2828
File: src/dashboard/Data/Browser/Browser.react.js:1605-1607
Timestamp: 2025-05-27T12:09:47.644Z
Learning: In script execution dialogs in Parse Dashboard (specifically the `confirmExecuteScriptRows` method in `src/dashboard/Data/Browser/Browser.react.js`), individual `setState` calls to update `processedScripts` counter should be kept as-is rather than batched, because this provides real-time progress feedback to users in the dialog UI.
🪛 GitHub Check: Lint
src/dashboard/Data/Config/Config.react.js
[failure] 484-484:
'e' is defined but never used
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Docker linux/amd64
🔇 Additional comments (6)
src/dashboard/Data/Config/Config.react.js (6)
26-26: LGTM: Notification component importThe import statement is correctly added for the notification functionality.
45-48: LGTM: Notification state managementThe state variables for managing notifications and timeout are well-structured. The
noteTimeoutreference will properly handle clearing timers.
140-151: LGTM: Notification rendering logicThe notification rendering logic is well-implemented with proper conditional rendering and error/success state management.
264-270: LGTM: Action column implementationThe conditional rendering of the plus button for Array types is appropriate and follows the established pattern.
291-296: LGTM: Action column headerThe header addition is consistent with the existing table structure.
461-474: LGTM: Well-implemented notification methodThe
showNotemethod properly manages notification state and automatically clears notifications after 3.5 seconds. The timeout clearing prevents memory leaks.
Uffizzi Ephemeral Environment
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
src/dashboard/Data/Config/AddArrayEntryDialog.react.js (2)
14-18: Consider adding PropTypes for better documentation.The component expects
onCancelandonConfirmprops but doesn't define PropTypes. Consider adding them for better type safety and documentation.+import PropTypes from 'prop-types'; + export default class AddArrayEntryDialog extends React.Component { + static propTypes = { + onCancel: PropTypes.func.isRequired, + onConfirm: PropTypes.func.isRequired, + }; + constructor() {
20-22: Consider enhancing validation logic.The current validation only checks for non-empty values. Consider adding more robust validation such as trimming whitespace or validating JSON format if needed.
valid() { - return this.state.value !== ''; + return this.state.value.trim() !== ''; }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
src/dashboard/Data/Config/AddArrayEntryDialog.react.js(1 hunks)src/dashboard/Data/Config/Config.react.js(10 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- src/dashboard/Data/Config/Config.react.js
🧰 Additional context used
🧠 Learnings (1)
src/dashboard/Data/Config/AddArrayEntryDialog.react.js (1)
Learnt from: mtrezza
PR: parse-community/parse-dashboard#2828
File: src/dashboard/Data/Browser/Browser.react.js:1605-1607
Timestamp: 2025-05-27T12:09:47.644Z
Learning: In script execution dialogs in Parse Dashboard (specifically the `confirmExecuteScriptRows` method in `src/dashboard/Data/Browser/Browser.react.js`), individual `setState` calls to update `processedScripts` counter should be kept as-is rather than batched, because this provides real-time progress feedback to users in the dialog UI.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Docker linux/amd64
🔇 Additional comments (3)
src/dashboard/Data/Config/AddArrayEntryDialog.react.js (3)
8-12: LGTM! Clean import structure.The imports are well-organized and follow the project's component structure.
24-30: Excellent flexible input handling!The JSON parsing approach is well-designed, allowing users to input both JSON objects and plain strings. The fallback to raw string on parsing failure provides excellent UX flexibility.
32-50: Well-structured modal implementation.The modal is properly configured with good UX features like autofocus and appropriate disabled state handling. The component integration is clean and follows React best practices.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
src/dashboard/Data/Config/Config.scss (2)
1-1: Prefer@useover@importfor future-proof Sass code
@importis now officially deprecated in Dart Sass; the Sass team recommends migrating to@use/@forwardfor better namespacing and faster compile times. Unless the rest of the codebase is still on@import, consider switching early to avoid technical debt.-@import 'stylesheets/globals.scss'; +@use 'stylesheets/globals' as *;
3-7: Class name is very generic – risk of leaking styles
.actionIconcould match unrelated SVG wrappers elsewhere, causing unintended color overrides. Prefix or scope the selector (e.g..configActionIconor.Config-table .actionIcon) to minimise collision risk and keep styles discoverable.-.actionIcon { +.config-actionIcon { svg { fill: $lightBlue; } }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
src/dashboard/Data/Config/Config.scss(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
- GitHub Check: Node 22
- GitHub Check: Node 18
- GitHub Check: Node 20
- GitHub Check: Docker linux/amd64
- GitHub Check: Node Engine Check
- GitHub Check: Lint
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
src/dashboard/Data/Config/Config.scss (2)
4-10: Consider enlarging hit-area for accessibility25 px × 25 px is below the WCAG-recommended 44 px minimum target size for touch devices, which may frustrate mobile / tablet users when tapping the icon.
- width: 25px; - height: 25px; + /* Increase touch target while keeping visual size via padding */ + width: 44px; + height: 44px; + padding: 10px; // tweak to centre the SVGIf you’d rather avoid a visual size change, you can keep the SVG at 25 px and simply add transparent padding to reach 44 px.
11-13: UsecurrentColorinstead of hard-coded fill for easier themingHard-coding
$darkBlueties the SVG color to this one stylesheet. Settingfill: currentColor;lets the icon inherit fromcolor, so themes or hover/disabled states can be changed in one place without editing SVG rules.- svg { - fill: $darkBlue; - } + svg { + fill: currentColor; + color: $darkBlue; // default, but can be overridden by themes/hover + }This makes the component more flexible while preserving the default palette.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
src/dashboard/Data/Config/AddArrayEntryDialog.react.js(1 hunks)src/dashboard/Data/Config/Config.react.js(10 hunks)src/dashboard/Data/Config/Config.scss(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- src/dashboard/Data/Config/Config.react.js
- src/dashboard/Data/Config/AddArrayEntryDialog.react.js
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Docker linux/amd64
# [7.3.0-alpha.1](7.2.1...7.3.0-alpha.1) (2025-07-07) ### Features * Add quick-add button to array parameter in Cloud Config ([#2866](#2866)) ([e98ccb2](e98ccb2))
|
🎉 This change has been released in version 7.3.0-alpha.1 |
# [7.3.0](7.2.1...7.3.0) (2025-08-01) ### Bug Fixes * Changing "Relative dates" option of saved filter does not enable save button ([#2947](#2947)) ([4f4977d](4f4977d)) * Class object counters in sidebar not updating ([#2950](#2950)) ([0f1920b](0f1920b)) * Clicking linked pointer with Cmd key in view table doesn't open page in new browser tab ([#2902](#2902)) ([101b194](101b194)) * Fails to generate MFA code with CLI command `parse-dashboard --createMFA` ([#2883](#2883)) ([544df1f](544df1f)) * Gracefully fail when trying to get new features in latest version of dashboard ([#2880](#2880)) ([1969a0e](1969a0e)) * Header checkbox in data browser does not indicate when a few rows are selected ([#2957](#2957)) ([e4ab666](e4ab666)) * Hyperlink in Views table ignores `urlQuery` key ([#2926](#2926)) ([c5eedf4](c5eedf4)) * Incorrect table cell width in App Settings table ([#2933](#2933)) ([d46765b](d46765b)) * Info panel scroll-to-top setting not persistent across dashboard sessions ([#2938](#2938)) ([2b78087](2b78087)) * Invalid clipboard content for multi-cell copy in data browser ([#2882](#2882)) ([22a2065](22a2065)) * Legacy filters without `filterId` cannot be deleted in data browser ([#2946](#2946)) ([65df9d6](65df9d6)) * Legacy filters without `filterId` do not appear in sidebar ([#2945](#2945)) ([fde3769](fde3769)) * Modal text input can be resized smaller than its cell in Safari browser ([#2930](#2930)) ([82a0cdc](82a0cdc)) * Move settings button on data browser toolbar for better UI ([#2940](#2940)) ([c473ce6](c473ce6)) * Pagination footer bar hides rows in data browser ([#2879](#2879)) ([6bc2da8](6bc2da8)) * Race condition on info panel request shows info panel data not corresponding to selected cell ([#2909](#2909)) ([6f45bb3](6f45bb3)) * Saved legacy filter in data browser cannot be deleted or cloned ([#2944](#2944)) ([15da90d](15da90d)) * Saved legacy filter with classname in query cannot be deleted ([#2948](#2948)) ([05ee5b3](05ee5b3)) * Selected text in info panel cannot be copied using Ctrl+C ([#2951](#2951)) ([0164c19](0164c19)) * Views not sorted alphabetically in sidebar ([#2943](#2943)) ([4c81fe4](4c81fe4)) * Warning dialog is shown after executing script on selected rows ([#2899](#2899)) ([027f1ed](027f1ed)) ### Features * Add additional values in info panel key-value element ([#2904](#2904)) ([a8f110e](a8f110e)) * Add AI agent for natural language interaction with Parse Server ([#2954](#2954)) ([32bd6e8](32bd6e8)) * Add clipboard icon to copy value of key-value element in info panel ([#2871](#2871)) ([7862c42](7862c42)) * Add Cloud Function as data source for views with optional text or file upload ([#2939](#2939)) ([f5831c7](f5831c7)) * Add column freezing in data browser ([#2877](#2877)) ([29f4a88](29f4a88)) * Add custom data views with aggregation query ([#2888](#2888)) ([b1679db](b1679db)) * Add environment variable support for AI agent configuration ([#2956](#2956)) ([2ac9e7e](2ac9e7e)) * Add hyperlink support in Views table ([#2925](#2925)) ([06cfc11](06cfc11)) * Add inclusive date filters "is on or after", "is on or before" in data browser ([#2929](#2929)) ([c8d621b](c8d621b)) * Add quick-add button to array parameter in Cloud Config ([#2866](#2866)) ([e98ccb2](e98ccb2)) * Add row number column to data browser ([#2878](#2878)) ([c0aa407](c0aa407)) * Add Settings menu to scroll info panel to top when browsing through rows ([#2937](#2937)) ([f339cb8](f339cb8)) * Add support for "not equal to" filter for Boolean values in data browser and analytics explorer ([#2914](#2914)) ([d55b89c](d55b89c)) * Add support for `Image` type in View table to display images ([#2952](#2952)) ([6a6b1f0](6a6b1f0)) * Add type mismatch warning when quick-adding entry to Cloud Config array parameter ([#2875](#2875)) ([bb1837f](bb1837f)) * Add view edit icon to views list in sidebar ([#2901](#2901)) ([96e33b9](96e33b9)) * Allow editing filter without loading data in data browser ([#2949](#2949)) ([9623580](9623580)) * Allow editing saved filters in data browser ([#2942](#2942)) ([daaccaa](daaccaa)) * Allow freeform text view resizing in modal dialogs ([#2910](#2910)) ([1399162](1399162)) * Persist info panel visibility when navigating across classes in data browser ([#2908](#2908)) ([1a3610a](1a3610a)) * Prefetch info panel data with config options `prefetchObjects` and `prefetchStale` ([#2915](#2915)) ([54a8156](54a8156)) * Warn when leaving data browser page with selected rows ([#2887](#2887)) ([206ead1](206ead1)) ### Performance Improvements * Add config option `enableResourceCache` to cache dashboard resources locally for faster loading in additional browser tabs ([#2920](#2920)) ([41a4963](41a4963))
Summary
Testing
npm run lint(fails: Cannot find module 'eslint/config')npm test(fails: jest: not found)https://chatgpt.com/codex/tasks/task_e_686b1b37db54832d89ef6887e264b889
Summary by CodeRabbit
New Features
Style
Documentation